#ifndef __SCNS_WM8978_H__
#define __SCNS_WM8978_H__

#include "ScnsConfig.h"

#if defined(SCNS_WM8978_ENABLE)&&SCNS_WM8978_ENABLE==1

#include "ScnsYing.h"
#include "ScnsBspWm8978.h"
#include "ScnsWav.h"
#include "ScnsMalloc.h"

extern ScnsStatus scnsWm8978Init(ScnsWm8978Enum wm8N);
extern ScnsStatus scnsWm8978SetAdcDacConfig(ScnsWm8978Enum wm8N,uint8 dacen,uint8 adcen);
extern ScnsStatus scnsWm8978SetOutputConfig(ScnsWm8978Enum wm8N,uint8 dacen,uint8 bpsen);
extern ScnsStatus scnsWm8978SetMicGain(ScnsWm8978Enum wm8N,uint8 gain);
extern ScnsStatus scnsWm8978SetLineinGain(ScnsWm8978Enum wm8N,uint8 gain);
extern ScnsStatus scnsWm8978SetAuxGain(ScnsWm8978Enum wm8N,uint8 gain);
extern ScnsStatus scnsWm8978SetI2sMode(ScnsWm8978Enum wm8N,uint8 fmt,uint8 len);
extern ScnsStatus scnsWm8978SetVol(ScnsWm8978Enum wm8N,uint8 voll,uint8 volr);
extern ScnsStatus scnsWm8978SetSpkVol(ScnsWm8978Enum wm8N,uint8 volx);
extern ScnsStatus scnsWm8978Set3d(ScnsWm8978Enum wm8N,uint8 depth);
extern ScnsStatus scnsWm8978SetEq3dDir(ScnsWm8978Enum wm8N,uint8 dir);
extern ScnsStatus scnsWm8978SetEq1(ScnsWm8978Enum wm8N,uint8 cfreq,uint8 gain);
extern ScnsStatus scnsWm8978SetEq2(ScnsWm8978Enum wm8N,uint8 cfreq,uint8 gain);
extern ScnsStatus scnsWm8978SetEq3(ScnsWm8978Enum wm8N,uint8 cfreq,uint8 gain);
extern ScnsStatus scnsWm8978SetEq4(ScnsWm8978Enum wm8N,uint8 cfreq,uint8 gain);
extern ScnsStatus scnsWm8978SetEq5(ScnsWm8978Enum wm8N,uint8 cfreq,uint8 gain);
extern ScnsStatus scnsWm8978SetInputConfig(ScnsWm8978Enum wm8N,uint8 micen,uint8 lineinen,uint8 auxen);

extern void scnsWm8978WavFree(ScnsWm8978Enum wm8N,const ScnsWav*wav);
extern void scnsWm8978TxFifoAddAndFree(ScnsWm8978Enum wm8N,ScnsWav*wav);
extern void scnsWm8978TxFifoAdd(ScnsWm8978Enum wm8N,const ScnsWav*wav,void (*callback)(ScnsWm8978Enum wm8N,const ScnsWav*wav));
extern void scnsWm8978RxFifoAdd(ScnsWm8978Enum wm8N,ScnsWav*wav,void (*callback)(ScnsWav*wav));

extern void scnsWm8978TxDmaFinishCallback(ScnsWm8978Enum wm8N,uint8 isHalf);
extern void scnsWm8978RxDmaFinishCallback(ScnsWm8978Enum wm8N,uint8 isHalf);

extern void scnsWm8978StartRecord(ScnsWm8978Enum wm8N,uint32 totN,ScnsMallocEnum malN,void (*callback)(ScnsWm8978Enum wm8N,ScnsWav*wav));
#endif
#endif
